home *** CD-ROM | disk | FTP | other *** search
/ BMUG PD-ROM B4 / PD-ROM B4.iso / Entertainment / Strategy / Robots / bot 1.0.1 / Tutorial / ASM / Bomber next >
Text File  |  1991-06-23  |  2KB  |  94 lines

  1. !
  2. ! Bomber
  3. !
  4. ! This bot recognizes when it takes damage, and it tries to run
  5. ! away when it gets hit.
  6. ! Its weapon is a grenade launcher, not an ordinary gun.
  7.  
  8. #DATA
  9.  
  10. EQU INCR    23
  11. EQU MINDIST 25
  12.  
  13. DEF DAMAGE
  14. DEF SCAN_AT
  15. DEF XX                  ! Destination coordinates
  16. DEF YY
  17. DEF GOX                 ! Prepared velocities for running away
  18. DEF GOY
  19. DEF TEMP
  20.  
  21. #CODE ASM
  22.  
  23. :INITIALIZE
  24.     JSR CALCPOS         ! Pick a point to go to
  25.     MUL 20, GOX         ! Prepare to accelerate an awful lot
  26.     MUL 20, GOY
  27.     MOV D0, DAMAGE      ! Remember current damage level
  28.  
  29. :SCANLOOP
  30.     CMP D0, DAMAGE      ! Have I been hit?
  31.     BNE RUNAWAY         !   If so, then run away.
  32.     ADD INCR, SCAN_AT
  33.     SCN SCAN_AT
  34.     CMP S0, 0
  35.     BEQ SCANLOOP
  36.     
  37.     MOV S1, R1          ! Set angle to target
  38.     MOV S2, R2          ! Set distance to target
  39.     CMP R2, MINDIST
  40.     BGE FIRE
  41.     MOV MINDIST, R2     ! Don't launch so close that you hit
  42.                         ! yourself!
  43. :FIRE
  44.     FIR 1               ! Don't bother locking, as grenades are
  45.     JMP SCANLOOP        ! pretty slow to detonate anyway
  46.  
  47. :RAWAY
  48.     JSR CALCVEL
  49.     MUL 2, GOX          ! Move there twice as fast.
  50.     MUL 2, GOY
  51. :RUNAWAY
  52.     VEL GOX, GOY
  53.    MOV XX, TEMP         ! Is XX-X0 > 30?  Then we're not there
  54.     SUB X0, TEMP        !   yet.  Otherwise, continue on.
  55.     CMP TEMP, 30
  56.     BGT RAWAY
  57.     NEG TEMP, TEMP      ! How about X0-XX?  If not, loop.
  58.     CMP TEMP, 30
  59.     BGT RAWAY
  60.    MOV YY, TEMP         ! YY-Y0 > 30?  Same thing.
  61.     SUB Y0, TEMP
  62.     CMP TEMP, 30
  63.     BGT RAWAY
  64.     NEG TEMP, TEMP      ! Y0-YY?  Last one...
  65.     CMP TEMP, 30
  66.     BGT RAWAY
  67.  
  68.     ! If we got this far, we must be within 30 pixels (both X
  69.     ! and Y) of our destination.  Close enough.
  70.     
  71.     VEL 0, 0
  72.     JMP INITIALIZE      ! Start all over again.
  73.  
  74.  
  75. ! These are subroutines.  CALCVEL calculates the new velocity
  76. ! for moving to point XX,YY.  CALCPOS does the same, except
  77. ! that it also picks random numbers between 20 and 235 for
  78. ! XX and YY.
  79.  
  80. :CALCPOS
  81.     RND 215, XX
  82.     RND 215, YY
  83.     ADD 20, XX
  84.     ADD 20, YY
  85. :CALCVEL
  86.     
  87.     MOV XX, GOX
  88.     SUB X0, GOX
  89.     MOV YY, GOY
  90.     SUB Y0, GOY
  91.     RET
  92.  
  93. #END
  94.